package org.example.day03;

import java.util.Scanner;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO+
 * <p>  绘图机器的绘图笔初始位置在原点（<span>0, 0</span>），机器启动后其绘图笔按下面规则绘制直线：<span><br> 1</span>）尝试沿着横向坐标轴正向绘制直线，直到给定的终点值<span>E</span>。<span><br> 2</span>）期间可通过指令在纵坐标轴方向进行偏移，并同时绘制直线，偏移后按规则<span>1 </span>绘制直线；指令的格式为X offsetY，表示在横坐标<span>X </span>沿纵坐标方向偏移，<span>offsetY</span>为正数表示正向偏移，为负数表示负向偏移。<span></span>  </p> <p>  给定了横坐标终点值<span>E</span>、以及若干条绘制指令，请计算绘制的直线和横坐标轴、以及<span> X=E </span>的直线组成图形的面积。<span></span>  </p>
 *
 * 绘图机器的绘图笔初始位置在原点（0, 0），
 * 机器启动后其绘图笔按下面规则绘制直线：
 * 1）尝试沿着横向坐标轴正向绘制直线，直到给定的终点值E。
 * 2）期间可通过指令在纵坐标轴方向进行偏移，并同时绘制直线，偏移后按规则1 绘制直线；指令的格式为X offsetY，表示在横坐标X 沿纵坐标方向偏移，offsetY为正数表示正向偏移，为负数表示负向偏移。
 * 给定了横坐标终点值E、以及若干条绘制指令，请计算绘制的直线和横坐标轴、以及 X=E 的直线组成图形的面积。
 * @date 2024/3/11 15:22
 */
public class test054 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取横坐标终点值 E
        int E = scanner.nextInt();

        // 读取绘制指令的数量
        int numInstructions = scanner.nextInt();

        // 读取并解析每条指令
        int[] instructions = new int[numInstructions * 2];
        for (int i = 0; i < numInstructions; i++) {
            String[] instruction = scanner.next().split(" ");
            instructions[i * 2] = Integer.parseInt(instruction[0]); // X 坐标
            instructions[i * 2 + 1] = Integer.parseInt(instruction[1]); // offsetY
        }

        // 计算图形面积
        int area = calculateArea(E, instructions);

        // 输出结果
        System.out.println(area);
    }

    // 计算图形面积的方法
    private static int calculateArea(int E, int[] instructions) {
        int currentX = 0; // 当前 X 坐标
        int currentY = 0; // 当前 Y 坐标
        int area = 0; // 图形面积

        for (int i = 0; i < instructions.length; i += 2) {
            int x = instructions[i]; // X 坐标
            int offsetY = instructions[i + 1]; // 偏移量

            // 计算此次偏移后绘制的直线与坐标轴围成的面积
            int width = Math.abs(x - currentX); // 直线宽度
            int height = Math.abs(offsetY); // 直线高度
            area += width * height;

            // 更新当前坐标
            currentX = x;
            currentY += offsetY;

            // 如果当前 X 坐标已经大于或等于 E，则停止绘制
            if (currentX >= E) {
                break;
            }
        }

        // 加上最后一段从当前坐标到 E 的直线与坐标轴围成的面积
        int finalWidth = E - currentX;
        area += finalWidth * Math.abs(currentY);

        return area;
    }
}